/**
 * volcano.ts
 * 火山平台集成模块
 * 
 * 本模块提供与火山平台API交互所需的所有功能，包括:
 * - 请求体构建函数
 * - 消息解析器
 * - 平台配置
 * - 便捷调用钩子
 */

// 定义消息类型 (为避免循环依赖直接在此定义)
interface Message {
  /** 消息角色: 'system'(系统),'user'(用户),'assistant'(助手) */
  role: 'system' | 'user' | 'assistant';
  /** 消息内容 */
  content: string;
}

/**
 * 火山平台请求体构建函数
 * 构建符合火山平台API要求的请求体格式
 * 
 * @param messages - 消息列表，包含用户、系统和助手的消息
 * @param config - 配置对象，包含模型等信息
 * @returns 格式化后的请求体对象
 */
export const volcanoBodyBuilder = (messages: Message[], config: any) => {
  return {
    model: config.model || 'deepseek-v3-250324', // 默认使用 deepseek-v3 模型
    stream: true, // 启用流式响应
    messages
  };
};

/**
 * 火山平台消息解析器
 * 解析来自火山平台的SSE消息格式
 * 
 * @param message - 服务器发送的事件消息
 * @returns 解析后的文本内容，解析失败时返回null
 */
export const volcanoParseMessage = (message: string): string | null => {
  if (!message.startsWith('data:')) return null;
  const dataStr = message.slice(5).trim();
  try {
    const parsedData = JSON.parse(dataStr);
    if ('choices' in parsedData && parsedData.choices[0].delta.content) {
      return parsedData.choices[0].delta.content;
    }
    return null;
  } catch (e) {
    console.warn('无法解析火山平台的消息内容:', dataStr);
    return null;
  }
};

/**
 * 火山平台配置
 * 包含与火山平台交互所需的基础配置
 */
export const volcanoConfig = {
  /** API基础URL */
  baseUrl: 'https://ark.cn-beijing.volces.com/api/v3/chat/completions',
  /** 请求头配置 */
  headers: {
    'Accept': 'text/event-stream'
  },
  /** 消息解析函数 */
  parseFunction: volcanoParseMessage,
  /** 请求体构建函数 */
  buildBodyFunction: volcanoBodyBuilder
};

/**
 * 预配置的火山平台钩子
 * 提供快速配置火山平台AI聊天的便捷方法
 * 
 * @param authToken - 认证令牌
 * @param model - AI模型名称，默认为deepseek-v3-250324
 * @returns 配置对象，用于传递给useAIStream
 */
export const useVolcanoChat = (authToken: string, model: string = 'deepseek-v3-250324') => {
  return {
    platform: 'volcano',
    authToken,
    model
  };
}; 